package k3_IO.p1_file.demo01;

import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.util.Date;

public class FileOperator {

    public static void crud(File file) throws Exception {
//        System.out.println(file.mkdir());
        //级联创建目录
//        System.out.println(file.mkdirs());

//        file.createNewFile();

//        System.out.println(file.renameTo(new File("E://ccc.txt")));


        //立即删除,只能删除空目录或文件
//        System.out.println(file.delete());
        //JVM正常退出的时候才删除
//        file.deleteOnExit();
//        Thread.sleep(20000);

    }

    public static void is(File file){
        System.out.println(file.exists());
        System.out.println(file.isFile());
        System.out.println(file.isDirectory());
        System.out.println(file.canRead());
        System.out.println(file.canWrite());
        System.out.println(file.canExecute());
        System.out.println(file.isAbsolute());
        System.out.println(file.isHidden());
    }

    public static void get(File file) throws IOException {
        System.out.println(file.getAbsoluteFile());
        System.out.println(file.getAbsolutePath());
        System.out.println(file.getCanonicalFile());
        System.out.println(file.getCanonicalPath());

        System.out.println(file.getParent());
        System.out.println(file.getParentFile());

        System.out.println(file.getName());

        System.out.println(file.length());

        System.out.println(new Date(file.lastModified()));
    }

    public static File set(File file){
        file.setLastModified(System.currentTimeMillis());
//        file.setReadOnly();
        file.setWritable(false);
        file.setWritable(false,true);
        file.setReadable(false);
        file.setExecutable(false);

        return file;
    }

    public static void getAll(File file){
//        String[] files = file.list();
//        System.out.println(Arrays.toString(files));

        File[] files = file.listFiles();
        for (File f : files) {
            System.out.println(f.getName());
            System.out.println(f.getAbsolutePath());
            System.out.println(f.canRead());
        }
    }

    /**
     * 级联遍历此目录下的所有文件/目录的名字
     * @param file
     */
    public static void forEachDir(File file){
        if(file.isDirectory()){
            File[] files = file.listFiles();
            for (File s : files) {
                if(s.isFile()){
                    System.out.println(s.getName());
                }else{
                    System.out.println("dir:"+s.getName());
                    forEachDir(s);
                }
            }
        }
    }

    public static void main(String[] args) throws Exception {

        //File类型的对象就表示了一个文件或目录，所以创建对象的时候就必须执行是哪个文件或目录
        File file1 = new File("E://test1");
        File file2 = new File(new URI("file:///E://test2"));
        File file3 = new File("E://","test3");
        File fileE = new File("E://");
        File file4 = new File(fileE,"test4");

        File file5 = new File("E://test5/test6/test7");

        File file6 = new File("E://test5");

//        File file = set(file6);
//        get(file);
//        is(file);

//        getAll(file6);

        forEachDir(file6);

    }
}
